// These are meant to be typed into the REPL. You can also run
// scala -Xnojline < 5_context.sc to run them all at once.
/**
  * 13.5	上下文界定
  *
  * 视图界定 T <% V 要求必须存在一个从 T 到 V 的隐式转换。
  * 上下文界定的形式为 T:M，其中 M 是另一个泛型类，
  * 它要求必须存在一个类型为 M[T]的隐式值。
  */
class Pair[T : Ordering](val first: T, val second: T) {
  def smaller(implicit ord: Ordering[T]) ={
    println(ord)
    if (ord.compare(first, second) < 0) first else second
  }

  override def toString = "(" + first + "," + second + ")"
}

/**
  * 上述类定义要求必须存在一个类型为 Ordering[T]的隐式值，当你使用了
  * 一个使用了隐式值得方法时， 传入该隐式参数。
  */
// Predef 类中有对应的隐式参数

val p = new Pair(4, 2)
p.smaller

val q = new Pair("Fred", "Brooks")
q.smaller

